# 多线程
import threading
import time
def run(n):
    print("task",n)
    time.sleep(2)
    print("2s")

start_time = time.time() # 记录开始时间
t_objs = [] # 存线程实例
for i in range(50):
    t = threading.Thread(target=run,args=("t-%s" % i,)) # 生成线程实例
    t.setDaemon(True) # 把当前线程设置为守护线程，主线程结束后，子线程也会结束
    t.start() # 启动线程    
    t_objs.append(t) # 为了不阻塞后面线程的启动，不在这里join，先放到一个列表里

for t in t_objs: # 循环线程实例列表，等待所有线程执行完毕
    t.join() # 主线程等待子线程执行完毕，再执行主线程
print("-----all threads has finished...",threading.current_thread(),threading.active_count()) # 主线程执行完毕
print("cost:",time.time()-start_time) # 记录结束时间